package org.dxy.trigger.http.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dxy.api.dto.request.unit.CreateUnitManageRequest;
import org.dxy.api.dto.request.unit.UpdateUnitManageRequest;
import org.dxy.api.dto.response.R;
import org.dxy.infrastructure.persistent.po.UnitManagePo;

import java.util.List;

/**
 * @description: 单位管理应用服务接口
 * @author: dxy
 * @createTime: 2025/1/21
 */
public interface UnitManageApplicationService {

    /**
     * 创建单位
     * @param request 创建请求
     * @return 创建结果
     */
    R<Long> create(CreateUnitManageRequest request);

    /**
     * 更新单位
     * @param request 更新请求
     * @return 更新结果
     */
    R<Void> update(UpdateUnitManageRequest request);

    /**
     * 分页查询单位列表
     * @param page 分页参数
     * @param query 查询条件
     * @return 分页结果
     */
    R<Page<UnitManagePo>> list(Page<UnitManagePo> page, UnitManagePo query);

    /**
     * 根据ID查询单位详情
     * @param id 单位ID
     * @return 单位详情
     */
    R<UnitManagePo> getById(Long id);

    /**
     * 根据单位编码查询单位
     * @param unitCode 单位编码
     * @return 单位详情
     */
    R<UnitManagePo> getByUnitCode(String unitCode);

    /**
     * 获取所有启用的单位
     * @return 单位列表
     */
    R<List<UnitManagePo>> getAllEnabled();

    /**
     * 根据单位类型查询单位列表
     * @param unitType 单位类型
     * @return 单位列表
     */
    R<List<UnitManagePo>> getByUnitType(String unitType);

    /**
     * 删除单位
     * @param id 单位ID
     * @return 删除结果
     */
    R<Void> delete(Long id);

    /**
     * 批量删除单位
     * @param ids 单位ID列表
     * @return 删除结果
     */
    R<Void> batchDelete(List<Long> ids);

    /**
     * 获取所有基础单位
     * @return 基础单位列表
     */
    R<List<UnitManagePo>> getBaseUnits();

    /**
     * 根据单位类型获取基础单位
     * @param unitType 单位类型
     * @return 基础单位列表
     */
    R<List<UnitManagePo>> getBaseUnitsByType(String unitType);
}